package authority.service;

import java.sql.Connection;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import authority.comm.Message;
import authority.comm.Page;
import authority.dao.RoleDao;
import authority.dao.RolePermissonDao;
import authority.entity.Role;
import authority.entity.RolePermission;
import authority.entity.User;
import authority.util.DbBuilder;
/**
 * 角色服务
 * @author shichenyang
 *
 */
public class RoleService {
	/**
	 * 角色dao
	 */
	private RoleDao dao=new RoleDao();
	/**
	 * 角色权限dao
	 */
	private RolePermissonDao permissonDao=new RolePermissonDao();
	
	/**
	 * 返回所有角色
	 * @return
	 */
	public List<Role> findAllRole(){
		return dao.findAllList();
	}
	
	public Page findListByPage(Integer start,Integer lengh,Role role){ 
		List<Role> l=dao.findListByPage(start, lengh, role);
		Integer i=dao.findAllCount(role);//查询总条数
		Page page=new Page();
		page.setData(l);
		page.setRecordsTotal(i);
		return page;
	}
	/**
	 * 添加角色
	 * @param name 角色名称
	 * @param remarks 备注
	 * @param permissions 权限id
	 * @param user 用户
	 * @return
	 */
	public Message addRole(String name,String remarks,String [] permissions,User user){
		Message message=new Message();
		Connection connection=DbBuilder.getConnection();
		DbBuilder.beginTransaction(connection);
		//1.添加角色需要将角色信息添加到角色表和角色权限表里
		//2.所以需要进行事务控制，如果报错的话，会直接回滚，只有当没有错误的时候，才会正常提交
		try {
			String rid=UUID.randomUUID().toString();
			Role role=new Role();
			role.setId(rid);
			role.setName(name);
			role.setRemarks(remarks);
			role.setOper(user.getName());
			role.setStatus("1");
			role.setCreateTime(new Date());
			role.setUpdateTime(new Date());
			dao.addRole(role, connection);
			
			//2.添加角色权限表
			for(int i=0;i<permissions.length;i++){
				RolePermission rolePermission=new RolePermission();
				rolePermission.setId(UUID.randomUUID().toString());
				rolePermission.setRid(rid);
				rolePermission.setPid(permissions[i]);
				rolePermission.setStatus("1");
				rolePermission.setUpdateTime(new Date());
				rolePermission.setCreateTime(new Date());
				rolePermission.setOper(user.getName());
				permissonDao.addRp(rolePermission);
			}
			message.setState(true);
			message.setMeg("添加成功");
			DbBuilder.commit(connection);
		} catch (Exception e) {
			e.printStackTrace();
			DbBuilder.rollback(connection);
			message.setState(false);
			message.setMeg("出错了，你需要再来一遍");
		}finally{
			DbBuilder.close(connection);
		}
		return message;
	}

}
